package cn.t222.util;

import cn.t222.pojo.SysResources;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class LayuiUtil {
    /**
     * 根据角色权限返回layui树需要的后台数据，包含选中属性等
     * @param rawList - 资源表所有记录
     * @param checkedList - 角色已经关联了的资源
     * @return - layui树需要的后台数据，包含选中属性等（需要转换成json）
     */
    public static List<LayuiTreeNode> convert(List<SysResources> rawList, List<SysResources> checkedList) {
        List<LayuiTreeNode> nodeList = new ArrayList<>();
        //转换所有资源对象为layui树节点
        rawList.forEach(resources -> {
            LayuiTreeNode node = new LayuiTreeNode();
            node.setId(resources.getId());
            node.setField("");
            node.setTitle(resources.getTitle());
            node.setHref(resources.getUrl());
            node.setParentId(resources.getPid());
            if(checkedList.contains(resources)) {
                if(resources.getPid() != 0) {
                    node.setChecked(true);
                }
                node.setSpread(true);
            }
            nodeList.add(node);
        });
        //按parentId分组
        Map<Integer, List<LayuiTreeNode>> nodeMap = nodeList.stream()
                .collect(Collectors.groupingBy(LayuiTreeNode::getParentId));
        //找出key==0的（根资源节点）
        List<LayuiTreeNode> rootList = nodeMap.get(0);
        rootList.forEach(rootNode->{
            //设置二级资源节点集合
            rootNode.setChildren(nodeMap.get(rootNode.getId()));
        });
        Collections.sort(rootList, (o1, o2) -> {
            return o1.getId().compareTo(o2.getId());
        });
        return rootList;
    }

    public static String getButtonHtml(List<SysResources> buttonResourceList) {
//        <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
//        <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
//        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
        StringBuffer buffer = new StringBuffer();
        buttonResourceList.forEach(resources -> {
            String name = resources.getName();
            if (resources.getType()==SysResources.TYPE_BUTTON_TABLE) {
                if (name.matches(".*view.*")) {
                    buffer.append("<a class=\"layui-btn layui-btn-primary layui-btn-xs\" lay-event=\"detail\">查看</a>");
                } else if (name.matches(".*update.*|.*edit.*|.*modify.*")) {
                    buffer.append("<a class=\"layui-btn layui-btn-xs\" lay-event=\"edit\">修改</a>");
                } else if (name.matches(".*del.*")) {
                    buffer.append("<a class=\"layui-btn layui-btn-danger layui-btn-xs\" lay-event=\"del\">删除</a>");
                }
            } else if (resources.getType()==SysResources.TYPE_BUTTON_FORM) {
                buffer.append("<button name=\""+ name +"\" type=\"button\" class=\"layui-btn layui-btn-radius layui-btn-normal\">"+resources.getTitle()+"</button>");
            }
            buffer.append(System.lineSeparator());
        });
        return buffer.toString();
    }

    public static void main(String[] args) {
        System.out.println("资源保存".matches(".*修改.*|.*保存.*"));
        System.out.println("资源修改".matches(".*修改.*|.*保存.*"));
        System.out.println("修改".matches(".*修改.*"));
        System.out.println("修改资源".matches(".*修改.*"));
        System.out.println("资源修改资源修改资源".matches(".*修改.*"));
    }
}
